void solve()
{
  string s;
  cin >> s;

  int n = sz(s);
  vector<vector<vector<Fenwick<int>>>> f(4, 
  vector<vector<Fenwick<int>>>(10, vector<Fenwick<int>>(10, Fenwick<int>(n))));

  auto add = [&](int i, int j, char ch, int p, int v) {
    if (ch == 'A') {
      f[0][i][j].add(p, v);
    }
    if (ch == 'T') {
      f[1][i][j].add(p, v);
    }
    if (ch == 'G') {
      f[2][i][j].add(p, v);
    }
    if (ch == 'C') {
      f[3][i][j].add(p, v);
    }
  };

  auto qry = [&](int i, int j, char ch, int l, int r) {
    if (ch == 'A') {
      return f[0][i][j].query(l, r);
    }
    if (ch == 'T') {
      return f[1][i][j].query(l, r);
    }
    if (ch == 'G') {
      return f[2][i][j].query(l, r);
    }
    if (ch == 'C') {
      return f[3][i][j].query(l, r);
    }
    return 0;
  };

  rep(i, 0, n - 1) {
    rep(j, 1, 10) {
      add(j - 1, i % j, s[i], i + 1, 1);
    }
  }

  int q;
  cin >> q;
  while (q--) {
    int op, l, r;
    cin >> op;
    if (op == 1) {
      char ch;
      cin >> l >> ch;
      l--;
      rep(j, 1, 10) {
        add(j - 1, l % j, s[l], l + 1, -1);
        add(j - 1, l % j, ch, l + 1, 1);
      }
      s[l] = ch;
    } else {
      string e;
      cin >> l >> r >> e;

      int m = sz(e), ans = 0;
      rep(j, 0, m - 1) {
        ans += qry(m - 1, (l + j - 1) % m, e[j], l, r);
      }
      cout << ans << '\n';
    }
  }
}